<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*
            深拷贝和浅拷贝
            1.浅拷贝只是拷贝一层，更深层次对象级别的只拷贝引用
            2.深拷贝拷贝多层，每一级的数据都会拷贝
        */
       //原生js中的拷贝  浅拷贝
       var obj = {
           id : 1,
           name:'andy',
           msg:{
               age:18
           }
       };
       var o = {};
    //    for(var k in obj){
    //        //k是属性命  obj[k]属性值
    //        o[k] = obj[k];
    //    }
    //    console.log(o);
    //    o.msg.age = 20;
    //    console.log(obj);


       //ES6中新增方法实现浅拷贝 Object.assign(target,...sources)
        // Object.assign(o,obj);
        // console.log(o);


        //js中实现深拷贝 函数递归
        //封装函数
        // function deepCopy(newobj,oldobj){
        //     for(var k in oldobj){
        //         //判断我们的属性值属于哪种数据
        //         //1.获取属性值 oldobj[k]
        //         var item = oldobj[k];
        //         //2.判断这个值是否是数组  数组也属于object所以要把数组判断写在obj判断前面
        //         if(item instanceof Array){
        //             newobj[k] = [];
        //             deepCopy(newobj[k],item)
        //         }else if(item instanceof Object){
        //             //3.判断值是否是对象
        //             newobj[k] = {};
        //             deepCopy(newobj[k],item)
        //         }else{
        //             //4.值是简单数据类型
        //             newobj[k] = item;
        //         }
                
                
        //     }
        // }
        // deepCopy(o,obj);
        // console.log(o);
        // o.msg.age = 20;
        // console.log(obj);

        //ES6中实现深拷贝
    </script>
</body>
</html>